<?php

namespace app\index\controller;

use Myredis\Myredis;
use think\Controller;
use think\Request;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use think\Db;
use think\Session;
class Indexcontroller extends Controller
{
    /**
     * 判断登录状态
     */
    public function _initialize()
    {
        $id = Request::instance()->session('uid');
        $name = Request::instance()->session('name');
        $stoken = Request::instance()->session('token');
        $rtoken = MyRedis::get(Request::instance()->session('tel') . 'token');
        if (!empty($rtoken)) {
            if ($stoken != $rtoken) {
                Session::clear();
                return $this->success('账号异常登录,请注意账号安全', url('index/index/index'));
            }
        }
        if (!$id) {
            return $this->error('请登录后再试', url('index/login/index'));
        }
        if (!$name) {
            return $this->error('请登录后再试', url('index/login/index'));
        }

    }


    public function upload($desc, $uid, $cid)
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        // 多维数组的重组

        $_FILES['myfile'] = $_FILES['myfile'];
//        unset($_FILES['icon']);


        $myfile = 'myfile';

        $count = count($_FILES[$myfile]['name']);
        for ($i = 0; $i < $count; $i++) {
            foreach ($_FILES[$myfile] as $key => $val) {
                $_FILES[$myfile . $i][$key] = $val[$i];
            }
        }


        // var_dump($_FILES);die;
        // 删除旧的上传信息
        unset($_FILES[$myfile]);

        // 生成变量 动态调用函数
        $myfile = 'myfile';
        $size = 10485760;
        $type = ['image'];
        $dir = './uploads/';
        // var_dump($_FILES);die;
        foreach ($_FILES as $key => $val) {
            // 此处要用 数组接收的返回值,否则 后者会覆盖前者
            $upInfo[] = $this->upfile($key, $size, $type, $dir);
        }

        foreach ($_FILES as $k => $v) {
            // 此处要用 数组接收的返回值,否则 后者会覆盖前者
            $list[] = $v['size'];
        }


        // 储存到数据库中
        foreach ($upInfo as $ks => $vs) {
            // 上传7牛云
            // 需要填写你的 Access Key 和 Secret Key
            $accessKey = "N3GnH7a9EyWyUMRdA2wlvUTgwqQjEldvqP_ODRDv";// 7牛云的 Access Key
            $secretKey = "Ea7tLc1QI1AeN3pKV5ZTWNzqwNgH0zepNAF0xl5L";//7牛云的 Secret Key
            $bucket = "yuntu";    ////7牛云的 bucket 库名
            // 构建鉴权对象
            $auth = new Auth($accessKey, $secretKey);
            // 生成上传 Token
            $token = $auth->uploadToken($bucket);
            // 要上传文件的本地路径
            $filePath = './static/Upload/' . date('Y/m/d/') . $vs;
            // 上传到七牛后保存的文件名
            $key = $vs;
            // 初始化 UploadManager 对象并进行文件的上传。
            $uploadMgr = new UploadManager();
            // 调用 UploadManager 的 putFile 方法进行文件的上传。
            list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
            // echo "\n====> putFile result: \n";
            // if ($err !== null) {
            // var_dump($err);
            // } else {
            // var_dump($ret['key']);
            // }

            // $ret 返回2个参数  hash 和 key    key对应的是图片的名字(即下载地址[key])
//            得到第一个.的位置
            $index = stripos($vs, '.');

            $p['ext'] = substr($vs, $index + 1);
            $time = time();
            $p['icon'] = $ret['key'];
            $p['cid'] = '1';
            $p['uid'] = $uid;
            $p['check'] = '2';
            $p['cid'] = '1';
            $p['status'] = '2';
            $p['desc'] = $desc;
            $p['pname'] = $desc;
            $p['addtime'] = $time;
            $p['cid'] = $cid;
            $p['size'] = $list[$ks];
            // 将上传到7牛云的图片地址存入数据库中
            $result = Db::table('xo_goods_up')->insert($p);
//            $id=Db::table('xo_user')->field('id')->where(['nickname'=>$name])->find();
//            $info['gid']=$result;
//            $info['uid']=$id['id'];
//            $list=Db::table('xo_user_goods')->insert($info);
        }
        // var_dump($upInfo);die;
        if ($result) {
            // 提交事务
            Db::commit();
            return $this->success('上传成功~');
        } else {
            // 事务回滚
            Db::rollback();
        }
    }

    function upfile($myfile = 'myfile', $size = 10485760, $type = ['image', 'text'], $dir = './uploads/')
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        if (empty($_FILES)) {
            return $this->error('可能设置错误<br> 请检查表单设置 或 php.ini的post设置');
        }

        // 获取上传信息
        $fileError = $_FILES[$myfile]['error'];
        $fileSize = $_FILES[$myfile]['size'];
        $fileType = $_FILES[$myfile]['type'];
        $fileName = $_FILES[$myfile]['name'];
        $fileTmp = $_FILES[$myfile]['tmp_name'];

        // 判断是否错误发生
        if ($fileError > 0) {
            // 提示信息
            echo '文件上传出错<br>';

            // 错误信息提示
            switch ($fileError) {
                case 1:
                    echo '上传的文件 超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项限制的';
                    break;
                case 3:
                    echo '文件只有一部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }

            // 一旦出错,再次中止
            return $this->error('即将跳转到上一层');
        }

        // 自由限制文件大小   上传文件的大小 > 调用大小值
        if ($fileSize > $size) {
            return $this->error('文件超过限制大小');
        }

        // 做文件类型的限制
        // 先的到上传文件的主类型
        // print_r(explode('/',  $fileType));
        list($mainType) = explode('/', $fileType);

        // echo $mainType;

        // 在调用的类型列表之中 搜索类型,进行匹配
        if (!in_array($mainType, $type)) {
            return $this->error('文件类型不合法');;
        }

        // 生成保存的文件
        // 先获取源文件的后缀
        $ext = pathinfo($fileName, PATHINFO_EXTENSION);
        // var_dump($ext);

        // 生成新的文件名: 时间+唯一ID+后缀
        $saveName = date('Ymd') . uniqid() . '.' . $ext;
        // echo $saveName;

        // 保存路径
        // echo date('Y/m/d');
        $savePath = './static/Upload/' . date('Y/m/d/');
        // echo $savePath;
        // 检测目录是否存在,不存在则建之
        if (!file_exists($savePath)) {
            mkdir($savePath, 0777, true);
        }
        // 拼接路径 +  文件名
        $saveFile = $savePath . $saveName;
        // echo $saveFile;

        // exit;
        // 移动文件
        if (move_uploaded_file($fileTmp, $saveFile)) {
            // 提交事务
            Db::commit();
            return $saveName;
        } else {
            // 事务回滚
            Db::rollback();
        }
    }


}
